EC2インスタンス間パスワードなしで、SSH接続してみる。
こんにちは、クラスメソッドのキム・ジェウク(Kim Jaewook)です。
今回は、EC2インスタンス間パスワードなしで、SSH接続する方法を整理してみました。
やりたいこと
- 「EC2 Instance A」から「EC2 Instance B」にSSH接続をしたい。
- 接続としては、パスワード認証なしで、接続したい。
- Defaultユーザーのec2-userだけでなく、Linux環境で作ったユーザーも接続を行いたい。
ssh-keygenを利用し、SSH接続
まずは、Defaultで設定されているec2-userで、「EC2 Instance B」に接続してみます。
接続方法としては、ssh-keygenを利用し、公開鍵と秘密鍵を作成する予定です。
[ec2-user@ip-10-0-9-109 ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ec2-user/.ssh/id_rsa. Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
「EC2 Instance A」に接続し、ssh-keygenコマンドで、公開鍵と秘密鍵を作成します。
「ssh/id_rsa」キーを保存したいディレクトリを入力し、パスワードを入力します。
※ パスワードをスキップすると鍵を使う時にパスワードを問いません。
※ ディレクトリもスキップするとDefaultである「/home/ユーザー名/.ssh/id_rsa.」に保存されます。
[ec2-user@ip-10-0-9-109 ~]$ cd .ssh [ec2-user@ip-10-0-9-109 .ssh]$ ls authorized_keys id_rsa id_rsa.pub [ec2-user@ip-10-0-9-109 .ssh]$ cat id_rsa.pub ssh-rsa AAAAB3NzxxxxxxxxxfuAvbn6N5ak/Hqn3zYrNf+oy5vLTEbt4/0i8= [email protected]
上記のコマンドを実行すれば、「.ssh」パスに公開鍵と秘密鍵が作成されたことが確認できます。
ここで、作成したid_rsa.pub(公開鍵)を「EC2 Instance B」にコピーすることで、パスワードなしで接続することができます。
※ catコマンドで表示されたid_rsa.pub(公開鍵)情報をコピーしておきます。
[ec2-user@ip-10-0-1-86 ~]$ cd .ssh
[ec2-user@ip-10-0-1-86 .ssh]$ ls
authorized_keys
[ec2-user@ip-10-0-1-86 .ssh]$ vi authorized_keys
「EC2 Instance B」に接続した後、「.ssh」パスで「authorized_keys」ファイルを確認します。
※ authorized_keysの中身にコピーした「EC2 Instance A」のid_rsa.pub(公開鍵)を入れます。
id_rsa.pub(公開鍵)を入れておきます。
※ すでに記載されている ssh-rsaは、EC2インスタンスを作成するとき設定したキーペアの情報になります。
[ec2-user@ip-10-0-1-86 .ssh]$ chmod 600 authorized_keys
最後にauthorized_keysに権限を与えます。
[ec2-user@ip-10-0-9-109 .ssh]$ ssh 10.0.1.86 Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.0.1.86' (ECDSA) to the list of known hosts. Last login: Wed Aug 2 03:38:16 2023 from xxxxxxxxxx [ec2-user@ip-10-0-1-86 ~]$
設定は終わりましたので、「EC2 Instance A」に戻って接続を試しますとパスワードなしでSSH接続ができました。
- ssh Private IP(EC2 Instance B)
EC2 Instance Bにユーザーを作成
[ec2-user@ip-10-0-1-86 .ssh]$ sudo adduser newuser
[ec2-user@ip-10-0-1-86 .ssh]$ sudo su - newuser
[newuser@ip-10-0-1-86 ~]$ mkdir .ssh
[newuser@ip-10-0-1-86 ~]$ chmod 700 .ssh
「EC2 Instance B」に「newuser」を作成します。
そして、.sshを作って、権限を与えます。
[newuser@ip-10-0-1-86 ~]$ cd .ssh [newuser@ip-10-0-1-86 .ssh]$ vi authorized_keys [newuser@ip-10-0-1-86 .ssh]$ chmod 600 authorized_keys
その後、先と同じくauthorized_keysにid_rsa.pub(公開鍵)を入れた後、権限を与えます。
[ec2-user@ip-10-0-9-109 .ssh]$ ssh [email protected] Last login: Wed Aug 2 04:09:20 2023 [newuser@ip-10-0-1-86 ~]$
「EC2 Instance A」に戻って接続を試してみるとパスワードなしでSSH接続ができます。
- ssh ユーザー名@Private IP(EC2 Instance B)
EC2 Instance Aにユーザーを作成
[ec2-user@ip-10-0-9-109 ~]$ sudo adduser newuser
[ec2-user@ip-10-0-9-109 ~]$ sudo su - newuser
[newuser@ip-10-0-9-109 ~]$ mkdir .ssh
[newuser@ip-10-0-9-109 ~]$ chmod 700 .ssh
「EC2 Instance A」に「newuserA」を作成します。
以前、作成したec2-userの公開鍵と秘密鍵を含め4つのファイルを「/home/newuserA/.ssh/」にコピーします。
-
authorized_keys
- id_rsa
- id_rsa.pub
- known_hosts
※ cpコマンドもしくは手動でコピーしても問題ございません。
[newuserA@ip-10-0-9-109 .ssh]$ chmod 600 authorized_keys ssh -i "ec2-key.pem" [email protected] Last login: Wed Aug 2 04:34:15 2023 [newuserA@ip-10-0-9-109 ~]$
Macなどの外部環境から「newuserA」にすぐSSH接続することができます。
[newuserA@ip-10-0-9-109 .ssh]$ chmod 600 id_rsa [newuserA@ip-10-0-9-109 .ssh]$ ssh [email protected] Last login: Wed Aug 2 04:15:42 2023 from 10.0.9.109 [newuser@ip-10-0-1-86 ~]$ exit [newuserA@ip-10-0-9-109 .ssh]$ ssh [email protected] Last login: Wed Aug 2 04:53:03 2023 from xxxxxxxxx [ec2-user@ip-10-0-1-86 ~]$
最後に「id_rsa」に権限を与えた後、 SSH接続を試すと「EC2 Instance B」のnewuserに問題なく接続できます。
他、作成したユーザーで、「EC2 Instance B」のec2-userに接続するときは、下記のコマンドを利用します。